package it.agm.fanta.activity.fragment;

import it.agm.fanta.FantaserviceApp;
import it.agm.fanta.R;
import it.agm.fanta.adapter.GiocatoriPartitaLegaAdapter;
import it.agm.fanta.model.Giocatore;
import it.agm.fanta.model.GiocatorePartitaLega;
import it.agm.fanta.model.Partita;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

/**
 * Fragment che contiene la lista delle news, il pulsante per accedere al
 * libretto, quello per accedere alla lista di appelli e quello per i risultati
 */
public class PartitaLegaFragment extends Fragment {
	private static final int MAX_SOSTITUZIONI = 3;
	

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		View rootView = inflater.inflate(R.layout.fragment_partita_lega_dettails, container,false);
		TextView titolo = (TextView) rootView.findViewById(R.id.datiNonDisponibili);
		//LinearLayout linearLayout = (LinearLayout) rootView.findViewById(R.id.tabellapartiteheader);
		TextView nomeSquadraCasa = (TextView) rootView.findViewById(R.id.nomeSquadraCasa);
		TextView nomeSquadraFuoriCasa = (TextView) rootView.findViewById(R.id.nomeSquadraFuoriCasa);
//		ListView rootListViewFuoriCasa = (ListView) rootView.findViewById(R.id.rootListViewFuoriCasa);
		if(FantaserviceApp.giocatorePartitaLega != null && FantaserviceApp.giocatorePartitaLega.size()>0){
			titolo.setVisibility(View.GONE);
			
			ListView listViewGiocatoriCasa = (ListView) rootView.findViewById(R.id.listGiocatoriCasa);
			ListView listViewGiocatoriFuori= (ListView) rootView.findViewById(R.id.listGiocatoriFuoriCasa);
			
			ArrayList<GiocatorePartitaLega> listCasa = new ArrayList<GiocatorePartitaLega>();
			ArrayList<GiocatorePartitaLega> listFuoricasa = new ArrayList<GiocatorePartitaLega>();
			ArrayList<GiocatorePartitaLega> listCasaRiserve = new ArrayList<GiocatorePartitaLega>();
			ArrayList<GiocatorePartitaLega> listFuoricasaRiserve = new ArrayList<GiocatorePartitaLega>();
			int golCasa = 0;
			int golFuoriCasa=0;
			String punteggioCasa ="";
			String punteggioFuoriCasa ="";
			String squadraCasa="";
			String squadraTrasferta="";
			
			long idPartita = FantaserviceApp.giocatorePartitaLega.get(0).getIdpartitalega();
			
			for(Partita partita :FantaserviceApp.partite.getPartite()){
				if(partita.getIdpartitalega() == idPartita){
					if(!partita.getPunteggiosquadracasa().equals("0")){
						FantaserviceApp.partitaGiocata = true;
					}
					squadraCasa = partita.getSquadracasa();
					golCasa = partita.getGolsquadracasa();
					punteggioCasa = partita.getPunteggiosquadracasa();

					squadraTrasferta = partita.getSquadratrasferta();
					golFuoriCasa = partita.getGolsquadratrasferta();
					punteggioFuoriCasa = partita.getPunteggiosquadratrasferta();
					break;
				}
			}
			nomeSquadraCasa.setText(squadraCasa + " ( " + golCasa +" \n" + punteggioCasa + " " );
			nomeSquadraFuoriCasa.setText("- " + golFuoriCasa + " ) " + squadraTrasferta +"\n- " + punteggioFuoriCasa);
			for(GiocatorePartitaLega giocatore : FantaserviceApp.giocatorePartitaLega){
				if(GiocatorePartitaLega.TITOLARE.equals(giocatore.getLineup())){
					if(squadraCasa.equals(giocatore.getSquadra())){
						listCasa.add(giocatore);
					}else{
						
						listFuoricasa.add(giocatore);
					}
				}else{
					if(squadraCasa.equals(giocatore.getSquadra())){
						listCasaRiserve.add(giocatore);
					}else{
						listFuoricasaRiserve.add(giocatore);
					}
				}
			}

			GiocatorePartitaLega separatore = createSepatator();
			listCasa.addAll(listCasaRiserve);
			gestioneSostituzioni(listCasa);
			listCasa.add(separatore);
			Collections.sort(listCasa, new LineupCustomComparator());
			
			listFuoricasa.addAll(listFuoricasaRiserve);
			gestioneSostituzioni(listFuoricasaRiserve);
			listFuoricasa.add(separatore);
			Collections.sort(listFuoricasa, new LineupCustomComparator());
			GiocatoriPartitaLegaAdapter adapterCasa = new GiocatoriPartitaLegaAdapter(getActivity(), R.layout.row_calciatore_partita_lega,listCasa);
			GiocatoriPartitaLegaAdapter adapterFuoriCasa = new GiocatoriPartitaLegaAdapter(getActivity(), R.layout.row_calciatore_partita_lega,listFuoricasa);
			
			listViewGiocatoriCasa.setAdapter(adapterCasa);
			listViewGiocatoriFuori.setAdapter(adapterFuoriCasa);
			
		}else{
			titolo.setText("Dati non disponibili");
		}
		
		return rootView;
	}

	/**
	 * @param listCasa
	 */
	public void gestioneSostituzioni(ArrayList<GiocatorePartitaLega> listaGiocatori) {
		FantaserviceApp.nRiserve = 0;
		FantaserviceApp.nSostituzioni = 0;
		FantaserviceApp.sostituzioni = new HashMap<Integer, Character>();
		for (GiocatorePartitaLega giocatorePartitaLega : listaGiocatori) {
			if(Giocatore.TITOLARE == giocatorePartitaLega.getLineup() && giocatorePartitaLega.getPunteggio() == -1 && FantaserviceApp.partitaGiocata){
				giocatorePartitaLega.setSostituito(true);
				FantaserviceApp.nRiserve += 1;
				FantaserviceApp.sostituzioni.put(FantaserviceApp.nRiserve, giocatorePartitaLega.getRuolo());
			}
		}
		for (GiocatorePartitaLega giocatorePartitaLega : listaGiocatori) {
			if (Giocatore.RISERVA == giocatorePartitaLega.getLineup() && giocatorePartitaLega.getPunteggio() > -1 && FantaserviceApp.partitaGiocata) {
				if (FantaserviceApp.nSostituzioni < FantaserviceApp.nRiserve && FantaserviceApp.nSostituzioni < MAX_SOSTITUZIONI) {
					for (int i = FantaserviceApp.nSostituzioni; i < FantaserviceApp.nRiserve; i++) {
						if (FantaserviceApp.sostituzioni.get(i + 1) != null && giocatorePartitaLega.getRuolo() == FantaserviceApp.sostituzioni.get(i + 1).charValue()) {
							giocatorePartitaLega.setIngresso(true);
							break;
						}
					}
				}
			}

		}
	}

	/**
	 * @return
	 */
	private GiocatorePartitaLega createSepatator() {
		GiocatorePartitaLega separatore = new GiocatorePartitaLega();
		separatore.setLineup('Q');
		separatore.setBonusmalus("00000000000");
		separatore.setCognome("Panchina");
		separatore.setNome("");
		separatore.setRuolo(' ');
		return separatore;
	}
	
	
	class FormazioneCustomComparator implements Comparator<GiocatorePartitaLega> {
	    @Override
	    public int compare(GiocatorePartitaLega o1, GiocatorePartitaLega                                                                                                                                                                                                                                                                                                                                                                 o2) {
	    	int retVal = new Integer(o1.getPosizione()).compareTo(new Integer(o2.getPosizione()));
	    	
	    			
	        return retVal;
	    }
	}
	
	class LineupCustomComparator implements Comparator<GiocatorePartitaLega> {
	    @Override
	    public int compare(GiocatorePartitaLega o1, GiocatorePartitaLega o2) {
	    	int retVal = -(new Character(o1.getLineup()).compareTo(new Character(o2.getLineup())));
	    	if (retVal == 0) {
	    		retVal = new Integer(o1.getPosizione()).compareTo(new Integer(o2.getPosizione()));
	        }
	    			
	        return retVal;
	    }
	}
}
